package fr.generali.accueilclient.gwt.client.state;

import com.google.gwt.core.client.Callback;

/**
 * Un StateStore est un mécanisme de persistance de couple (clé, valeur) tous
 * deux de type String.
 * 
 * Il est Asynchrone pour assurer la compatibilité avec RPC, RequestFactory,
 * etc.
 * 
 * Le store (stokage) est sous la forme (clé, valeur) tous deux de type String.
 * 
 */
public interface StateStore {

	/**
	 * Permet de récupérer l'état d'un objet à partir de son identifiant.
	 * 
	 * La requête est asynchrone car il est possible de sauvegarder l'état sur
	 * le serveur à travers une requête AJAX (GWT-RPC, RequestFactory, etc.)
	 * 
	 * @param stateId
	 *            L'identifiant de l'état à récupérer.
	 * @param callback
	 *            La fonction Callback qui appelée une l'appel asynchrone
	 *            effectué.
	 */
	void get(String stateId, Callback<String, Throwable> callback);

	/**
	 * Insère un état sous forme de String. L'état de l'objet doit être
	 * sérialisé en String avant de l'enregistrer.
	 * 
	 * Insérer une value vide ou null reviendrai à supprimer l'entrée, c-à-d
	 * set(stateId, "") est équivalent à clear(stateId).
	 */
	/**
	 * @param stateId
	 *            L'identifiant de l'état à insérer.
	 * @param value
	 *            L'état sérialisé en String.
	 */
	void set(String stateId, String value);

	/**
	 * Supprime l'état dont l'identifiant est stateId.
	 * 
	 * @param stateId
	 *            L'identifiant de l'état à supprimer.
	 */
	void clear(String stateId);

	/**
	 * Supprimer la totalité du contenu du store.
	 */
	void clear();

}